package com.shiro.demo;

import com.shiro.realm.MyRealm;
import com.shiro.token.MyToken;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.subject.Subject;

/**
 *
 *   使用自定义的 AuthenticationToken 实现类，实现无密码登录（或者说密码就是用户名）
 * @author hjwStart
 * @time 2022-12-15 16:19
 * @version: 1.0
 */
public class Demo5 {

    public static void main(String[] args) {
        DefaultSecurityManager securityManager = new DefaultSecurityManager();
        securityManager.setRealm(new MyRealm());
        SecurityUtils.setSecurityManager(securityManager);
        MyToken myToken = new MyToken("admin");
        Subject subject = SecurityUtils.getSubject();
        // login方法会抛出 UnsupportedTokenException 异常，
        // login方法要求参数必须是 UsernamePasswordToken 的子类
        // 有点可惜，不过自定义的 AuthenticationToken 实现类可以在Realm中使用
        // 可以将 doGetAuthenticationInfo 方法的参数强转为我们自定义的 AuthenticationToken 实现类
        subject.login(myToken);
    }

}
